package controlador;
import connection.Connection;
import dao.ArchivosJpaController;
import dao.exceptions.PreexistingEntityException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManagerFactory;
import modelo.Archivos;
import modelo.ArchivosPK;
import modelo.Proyecto;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author Fabian
 */
@ManagedBean(name="ControladorArchivos")
@SessionScoped
public class ControladorArchivos implements Serializable{
    
    private String destination="C:\\Users\\Public\\Documents\\Sispro\\";
    private UploadedFile file;
    private EntityManagerFactory factory;
    private List<Archivos> listaArchivos;
    private Archivos archivo;

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }

    public Archivos getArchivo() {
        return archivo;
    }

    public void setArchivo(Archivos archivo) {
        this.archivo = archivo;
    }

    public List<Archivos> getListaArchivos() {
        return listaArchivos;
    }

    public void setListaArchivos(List<Archivos> listaArchivos) {
        this.listaArchivos = listaArchivos;
    }
    
    public void handleFileUpload(FileUploadEvent event) {  
        setFile(event.getFile());
        try {
                    transferFile(getFile().getFileName(),getFile().getInputstream());
                } catch (IOException ex) {
                    Logger.getLogger(ControladorArchivos.class.getName()).log(Level.SEVERE, null, ex);
                    FacesContext contex=FacesContext.getCurrentInstance();
                    contex.addMessage(null, new FacesMessage("Error","falla al subir archivo"));
                }
                    subirArchivos(getFile().getFileName());
                    FacesContext contex=FacesContext.getCurrentInstance();
                    contex.addMessage(null, new FacesMessage("Terminado","archivo subido con exito"));
                 }  
    
    public ControladorArchivos(){}
    
    public void transferFile(String FileName, InputStream in){
        try {
            OutputStream out= new FileOutputStream(new File(destination + FileName));
            int reader=0;
            byte[] bytes= new byte[(int)getFile().getSize()];
            try {
                while((reader=in.read(bytes))!=-1){
                    out.write(bytes,0,reader);
                }
                in.close();
                out.flush();
                out.close();
            } catch (IOException ex) {
                Logger.getLogger(ControladorArchivos.class.getName()).log(Level.SEVERE, null, ex);
            }
        
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ControladorArchivos.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }
    
    public void subirArchivos(String Filename){
    
    factory = Connection.getEmf();
    ArchivosJpaController daoArchivos = new ArchivosJpaController(factory);
    ControladorProyecto controla = (ControladorProyecto) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ControladorProyecto");
    Proyecto p=controla.getProyecto();
    Archivos a= new Archivos();
    ArchivosPK pk= new ArchivosPK();
    pk.setIdproyecto(p.getIdproyecto());
    pk.setRutaarchivo(destination+Filename);
    a.setNombrearchivo(Filename);
    a.setProyecto(p);
    a.setArchivosPK(pk);
        try {
            daoArchivos.create(a);
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(ControladorArchivos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ControladorArchivos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void cargarArchivos(){
    factory = Connection.getEmf();
    ArchivosJpaController daoArchivos = new ArchivosJpaController(factory);
    ControladorProyecto controla = (ControladorProyecto) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ControladorProyecto");
    Proyecto p=controla.getProyecto();
    List<Archivos> lista= new ArrayList<Archivos>();
    lista=daoArchivos.findArchivosEntities();
    List<Archivos> aux= new ArrayList<Archivos>();
    for(int i=0; i<lista.size(); i++){
        if(lista.get(i).getArchivosPK().getIdproyecto().equals(p.getIdproyecto())){
        aux.add(lista.get(i));
        
        }
        setListaArchivos(aux);
    
    }
    
    
    }
    }
